package com.hjx.leetcode;

/**
 * 9. 回文数
 *
 * 判断一个整数是否是回文数。回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。
 *
 * 示例 1:
 *
 * 输入: 121
 * 输出: true
 *
 * 示例 2:
 *
 * 输入: -121
 * 输出: false
 * 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
 * 示例 3:
 *
 * 输入: 10
 * 输出: false
 * 解释: 从右向左读, 为 01 。因此它不是一个回文数。
 *
 * 进阶:
 *    你能不将整数转为字符串来解决这个问题吗？
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/palindrome-number
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * 执行用时 : 9 ms, 在所有 Java 提交中击败了99.32%的用户
 * 内存消耗 : 36.4 MB, 在所有 Java 提交中击败了96.19%的用户
 */
class LeetCode_9 {

    /**
     * 改进版
     *      * 翻转一半数字即可，但要注意奇数位时，对x要做对10取整
     */
    public boolean isPalindrome2(int x) {
        //TODO:待实现
        return false;
    }

        /**
         * 翻转数字，取最后一位（x对10取余）加上上次处理的结果 t（初始为0） 乘以10，令x对10取整，以此类推知道 x 为 0为止
         * 最后比较翻转后的值和翻转前的数字
         *
         * @param x
         * @return
         */
    public boolean isPalindrome(int x) {

        int a = x;
        if(a < 0) {
            return false;
        }
        //个位数
        if(a < 10) {
            return true;
        }
        //2位以上 XX0 X0 XXX0 肯定不是回文串
        if(a % 10 == 0) {
            return false;
        }


        int t = 0;
        while(x > 0) {
            t = t * 10 + x % 10;
            x = x / 10;
        }

        return a == t;
    }

    /**
     * 转字符串，双指针 折半对比，对比结果全部为true则为回文数字
     * @param x
     * @return
     */
    public boolean isPalindrome1(int x) {

        String xStr = String.valueOf(x);
        char[] chars = xStr.toCharArray();
        for (int i = 0; i < chars.length / 2; i++) {
            if (chars[i] != chars[chars.length - 1 -i]){
                return false;
            }
        }
        return true;
    }
}
